package com.example.demo.service.Impl;

import com.alibaba.fastjson.JSONObject;
import com.example.demo.domain.Express;
import com.example.demo.repository.ExpressMapper;
import com.example.demo.service.ExpressService;
import com.example.demo.utils.HttpUtils;
import org.apache.http.HttpResponse;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.HashMap;
import java.util.Map;


/**
 * @Create:     LT4
 * @Time:       2020年6月1日21:41:06
 * @Describe:   service层 查询物流快递结点信息
 */
@Service
public class ExpressServiceImpl implements ExpressService {

    @Value("${express.appcode}")
    private String appcode;

    @Autowired
    private ExpressMapper expressMapper;

    @Override
    public Express getExpressById(Integer id) {
        return expressMapper.getExpressById(id);
    }

    @Override
    public void addExpress(Express express) {
        expressMapper.addExpress(express);
    }

    @Override
    public void delExpressById(Integer id) {
        expressMapper.delExpressById(id);
    }

    @Override
    public void saveExpress(Express express) {
        expressMapper.saveExpress(express);
    }



    @Override
    @Transactional(rollbackFor = {RuntimeException.class, Error.class})
    public JSONObject queryExpressInfo(Express express) {
        String host = "https://ali-deliver.showapi.com";
        String path = "/showapi_expInfo";
        String method="GET";
        //headers
        Map<String, String> headers = new HashMap<String, String>();
        headers.put("Authorization", "APPCODE " + appcode);
        //query
        Map<String, String> querys = new HashMap<String, String>();
        querys.put("com", express.getCom());
        querys.put("nu", express.getNu());
        try {
            HttpResponse response = HttpUtils.doGet(host, path, method, headers, querys);
            return JSONObject.parseObject(EntityUtils.toString(response.getEntity()));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    @Override
    @Transactional(rollbackFor = {RuntimeException.class, Error.class})
    public Integer getIdByNu(String nu)
    {
        return expressMapper.getIdByNu(nu);
    }

}


/* //返回数据示例
{
  "showapi_res_error": "",//showapi平台返回的错误信息
  "showapi_res_code": 0,//showapi平台返回码,0为成功,其他为失败
  "showapi_res_id": "5ea941d48d57baae12a0bcd5",
  "showapi_res_body": {
    "update": 1588141785719,//数据最后查询的时间
    "upgrade_info": "", //提示信息，用于提醒用户可能出现的情况
    "updateStr": "2020-04-29 14:29:45",//数据最后更新的时间
    "logo": "http://app2.showapi.com/img/expImg/zto.jpg", //快递公司logo
    "dataSize": 11,  //数据节点的长度
    "status": 4, //-1 待查询 0 查询异常 1 暂无记录 2 在途中 3 派送中 4 已签收 5 用户拒签 6 疑难件 7 无效单
 8 超时单 9 签收失败 10 退回
    "fee_num": 1,
    "tel": "95311",//快递公司电话
    "data": [
      {
        "time": "2019-11-16 21:33:56",
        "context": "快件已在 【九江城西港】 签收, 签收人: 速递易, 如有疑问请电联:（15779254414）, 投诉电话:（13687028760）, 您的快递已经妥投。风里来雨里去, 只为客官您满意。上有老下有小, 赏个好评好不好？【请在评价快递员处帮忙点亮五颗星星哦~】"
      },
        "time": "2019-11-13 10:27:33",
        "context": "【石家庄市场部】（0311-68026565、0311-68026566） 的 付保文四组（031186891089） 已揽收"
      }
    ],
    "expSpellName": "zhongtong",//快递字母简称
    "msg": "查询成功", //返回提示信息
    "mailNo": "75312165465979",//快递单号
    "queryTimes": 1, //无走件记录时被查询次数     注意：超过8次将会计费,即第9次开始计费
    "ret_code": 0,//接口调用是否成功,0为成功,其他为失败
    "flag": true,//物流信息是否获取成功
    "expTextName": "中通快递", //快递简称
    "possibleExpList": [] //自动识别结果
  }
}
*/